//给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
//
//
//
// 示例 1:
//
// 输入: [2,3,-2,4]
//输出: 6
//解释: 子数组 [2,3] 有最大乘积 6。
//
//
// 示例 2:
//
// 输入: [-2,0,-1]
//输出: 0
//解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
// Related Topics 数组 动态规划 👍 1476 👎 0

package leetcode.editor.cn;

@SuppressWarnings("all")
//Java：乘积最大子数组
public class 乘积最大子数组 {
    public static void main(String[] args) {
        Solution solution = new 乘积最大子数组().new Solution();
        // TO TEST
        int[] nums = {-2, 0, -1};
        System.out.println(solution.maxProduct(nums));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int maxProduct(int[] nums) {
            int crrMax = 1;
            int crrMin = 1;
            int max = Integer.MIN_VALUE;
            for (int num : nums) {
                if (num < 0) {
                    int temp = crrMax;
                    crrMax = crrMin;
                    crrMin = temp;
                }
                crrMax = Math.max(num, crrMax * num);
                crrMin = Math.min(num, crrMin * num);
                max = Math.max(max, crrMax);
            }

            return max;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)


}
